package com.zhongmeng.rxjava2test.utils

import android.content.SharedPreferences
import android.preference.PreferenceManager
import android.text.TextUtils

import com.zhongmeng.rxjava2test.MyApplication
import com.zhongmeng.rxjava2test.bean.LoginBean


/**
 * author : rcw
 * time   : 2017/7/31
 * version: 1.0
 * desc   : 保存用户信息
 */
class SaveUserInfo//私有构造器
private constructor() {
    private var mSharedPreferences: SharedPreferences? = null
    //保存用户信息静态字段/sp中的key
    private val KEY_TOKEN = "token"// Token值/操作校验值  string
    private val KEY_ID = "id"// 用户id  string
    private val KEY_LOGINID = "loginid"// 登陆账号  string
    private val KEY_USERNAME = "userName"// 用户姓名 string
    private val KEY_USER_PASSWORD = "passWord"// 用户密码 int
    private val KEY_TYPE = "type"//  1 个人 2 企业 String
    private val KEY_STATE = "state"//
    private val KEY_UNIT_NAME = "unitName"// 单位名称
    private val KEY_UNIT_CODE = "unitCode"// 单位code
    private val KEY_AREA_CODE = "Code"// 区域编码
    private val KEY_USE_STATE = "use_state"// 用户账号状态
    private val KEY_OVERRID_TIME = "overridtime"// 过期时间
    private val KEY_IMAGE_URL = "URL"// 过期时间
    /**
     * 获取id信息
     */
    val id: Int
        get() = mSharedPreferences!!.getInt(KEY_ID, 0)
    /**
     * 获取token信息
     */
    val token: String
        get() = mSharedPreferences!!.getString(KEY_TOKEN, "")

    /**
     * 获取password信息
     */
    val userPassWord: String
        get() = mSharedPreferences!!.getString(KEY_USER_PASSWORD, "")
    /**
     * 获取LOGINid信息
     */
    val loginId: String
        get() = mSharedPreferences!!.getString(KEY_LOGINID, "")

    /**
     * 获取用户姓名
     */
    val userName: String
        get() = mSharedPreferences!!.getString(KEY_USERNAME, "")
    /**
     * 获取单位名
     */
    val unitName: String
        get() = mSharedPreferences!!.getString(KEY_UNIT_NAME, "")

    /**
     * 获取单位名
     */
    val unitCode: String
        get() = mSharedPreferences!!.getString(KEY_UNIT_CODE, "")

    /**
     * 获取区域码
     */
    val areaCode: String
        get() = mSharedPreferences!!.getString(KEY_AREA_CODE, "")
    /**
     * 获取角色type
     */
    val state: Int
        get() = mSharedPreferences!!.getInt(KEY_STATE, 0)
    /**
     * 获取角色type
     */
    val type: String
        get() = mSharedPreferences!!.getString(KEY_TYPE, "")
    /**
     * 获取角色type
     */
    val useState: String
        get() = mSharedPreferences!!.getString(KEY_USE_STATE, "")

    /**
     * 获取过期时间type
     */
    val time: Long
        get() = mSharedPreferences!!.getLong(KEY_OVERRID_TIME, 0)
    /**
     * 获取用户图像url
     */
    val headImageUrl: String
        get() = mSharedPreferences!!.getString(KEY_IMAGE_URL, "")

    //是否有效登录
    val isLogin: Boolean
        get() {
            if (!TextUtils.isEmpty(token) && System.currentTimeMillis() <= time) {
                LogUtils.z("getOverridTime=" + time)
                LogUtils.z("System.currentTimeMillis=" + System.currentTimeMillis())
                return true
            }
            return false
        }

    init {
        if (mSharedPreferences == null) {
            mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.instance)
        }
    }

    //获取保存sp的值，防止为null
    private fun getValue(value: String): String {
        return if (TextUtils.isEmpty(value)) "" else value
    }

    /**
     * 保存id信息
     * @param id
     */
    fun saveId(id: String) {

        mSharedPreferences!!.edit().putString(KEY_ID, getValue(id)).apply()
    }

    /**
     * 保存token信息
     * @param token 操作token
     */
    fun saveToken(token: String) {

        mSharedPreferences!!.edit().putString(KEY_TOKEN, getValue(token)).apply()
    }

    /**
     * 保存password信息
     */
    fun saveUserPassWord(passWord: String) {

        mSharedPreferences!!.edit().putString(KEY_USER_PASSWORD, passWord).apply()
    }

    /**
     * 保存loginid信息
     */
    fun saveLoginId(loginId: String) {

        mSharedPreferences!!.edit().putString(KEY_LOGINID, loginId).apply()
    }

    /**
     * 保存用户姓名
     */
    fun saveUserName(userName: String) {
        mSharedPreferences!!.edit().putString(KEY_USERNAME, getValue(userName)).apply()
    }

    /**
     * 保存单位名
     */
    fun saveUnitName(unitName: String) {
        mSharedPreferences!!.edit().putString(KEY_UNIT_NAME, getValue(unitName)).apply()
    }

    /**
     * 保存单位名
     */
    fun saveUnitCode(unitCode: String) {
        mSharedPreferences!!.edit().putString(KEY_UNIT_CODE, getValue(unitCode)).apply()
    }

    /**
     * 保存单位名
     */
    fun saveAreaCode(areaCode: String) {
        mSharedPreferences!!.edit().putString(KEY_AREA_CODE, getValue(areaCode)).apply()
    }

    /**
     * 保存角色type
     */
    fun saveState(state: Int) {
        mSharedPreferences!!.edit().putInt(KEY_STATE, state).apply()
    }

    /**
     * 保存角色type
     */
    fun saveType(type: String) {
        mSharedPreferences!!.edit().putString(KEY_TYPE, type).apply()
    }

    /**
     * 保存角色type
     */
    fun saveUseState(usestate: String) {
        mSharedPreferences!!.edit().putString(KEY_USE_STATE, usestate).apply()
    }

    /**
     * 保存用户图像url
     */
    fun saveHeadImageUrl(url: String) {
        mSharedPreferences!!.edit().putString(KEY_IMAGE_URL, url).apply()
    }

    /**
     * 保存用户所有信息
     */
    fun saveAllData(loginBean: LoginBean?) {
        if (loginBean == null) {
            return
        }
        LogUtils.z("loginBean", "保存用户所有信息")
        mSharedPreferences!!.edit()
                .putInt(KEY_ID, loginBean.userinfo!!.id)
                //.putString(KEY_ID, getValue(loginBean.getUserinfo().getId()))
                .putString(KEY_LOGINID, getValue(loginBean.userinfo!!.loginid!!))
                .putString(KEY_USER_PASSWORD, getValue(loginBean.userinfo!!.password!!))
                .putString(KEY_USERNAME, getValue(loginBean.userinfo!!.username!!))
                .putString(KEY_UNIT_NAME, getValue(loginBean.userinfo!!.unitname!!))
                .putString(KEY_UNIT_CODE, getValue(loginBean.userinfo!!.unit_code!!))
                .putString(KEY_AREA_CODE, getValue(loginBean.userinfo!!.areacode!!))
                .putString(KEY_TOKEN, getValue(loginBean.token!!))
                .putString(KEY_TYPE, getValue(loginBean.userinfo!!.plat_type!!))
                .putString(KEY_USE_STATE, getValue(loginBean.userinfo!!.use_state!!))
                .putString(KEY_IMAGE_URL, getValue(loginBean.userinfo!!.head_url!!))
                .putInt(KEY_STATE, loginBean.state)
                .putLong(KEY_OVERRID_TIME, loginBean.time)
                .apply()
    }


    /**
     * 清除本地个人用户所有信息
     */
    fun clearAllData() {
        mSharedPreferences!!.edit().clear().apply()
    }

    companion object {
        private var mInstance: SaveUserInfo? = null

        /**
         * 获取用户信息存储单例
         * @return 实体单例
         */
        val instance: SaveUserInfo
            get() {
                if (mInstance == null) {
                    synchronized(SaveUserInfo::class.java) {
                        if (mInstance == null) {
                            mInstance = SaveUserInfo()
                        }
                    }
                }
                return this!!.mInstance!!
            }
    }

}
